16.13 Die »ComboBox« (Kombinationslistenfeld)
 
Das Kombinationslistenfeld ist ein Steuerelement, das ein bisschen Textbox ist, ein bisschen Schaltfläche und auch ein wenig Listbox. Grundsätzlich ähnelt das Verhalten am ehesten noch einer Listbox mit dem Unterschied, dass in einer Combobox immer nur ein Listenelement ausgewählt werden kann. Es kann deshalb immer alternativ zu einer Listbox mit einfacher Auswahl eingesetzt werden und hat dabei den Vorteil, dass es in der Form nur so viel Platz wie eine Textbox beansprucht. Die Liste wird erst dann angezeigt, wenn auf die Pfeilschaltfläche geklickt wird.
Das Kombinationslistenfeld wird durch die Klasse ComboBox beschrieben. Comboboxen lassen drei Darstellungsarten zu. Die Eigenschaft, die darüber entscheidet, ist DropDownStyle, die vom Typ der Enumeration ComboBoxStyle ist.
Tabelle 16.15 Die Enumeration »ComboBoxStyle«
| Member
|
Beschreibung
|
| Simple
|
Das Kombinationslistenfeld wird wie eine Textbox angezeigt. Das Feld kann editiert werden.
|
| DropDown
|
Um die Liste zu zeigen, muss der Anwender auf die Schaltfläche klicken. Das angezeigte Feld kann editiert werden.
|
| DropDownList
|
Um die Liste zu zeigen, muss der Anwender auf die Schaltfläche klicken. Das angezeigte Feld kann nicht editiert werden.
|
Ziehen Sie ein Combobox aus der Toolbox in Ihr Formular, hat die Eigenschaft DropDownStyle die Einstellung DropDown. Der im Feld angezeigte Inhalt kann editiert werden.
Öffnet sich die Drop-down-Liste, werden per Vorgabe acht Elemente angezeigt. Ist die Liste länger, kann mit Bildlaufleisten durch die Liste navigiert werden. Mit der Eigenschaft MaxDropDownItems kann die angezeigte Anzahl zwischen 1 und 100 verändert werden.
Ähnlich präsentiert sich auch ein Kombinationslistenfeld mit ComboBoxStyle.DropDownList. Allerdings sind mit dieser Einstellung die Listeneinträge nicht editierbar.
ComboBoxStyle.Simple wird in der Praxis seltener eingesetzt. Mit dieser Einstellung zeigt das Steuerelement keine Pfeilschaltfläche, die Combobox sieht aus wie eine Textbox, unter der ein Listenfeld angehängt ist. Das in der Liste ausgewählte Element wird im Textbereich angezeigt. Über die Size-Eigenschaft kann die Höhe und somit auch die Anzahl der angezeigten Listenelemente beeinflusst werden.
Eine Combobox ähnelt einer Listbox mit einfacher Auswahl – nicht nur hinsichtlich der Funktionalität, auch die Programmierung unterscheidet sich nur unwesentlich. Wie eine Listbox weist auch eine Combobox die Eigenschaft Items auf, die eine Referenz auf die Auflistung ComboBox.ObjectCollection bereitstellt, in der alle Listenelemente der Combobox verwaltet werden. Auf die Referenz der ObjectCollection können die üblichen Methoden aufgerufen werden (Add, Remove usw.). Außerdem wird eine Eigenschaft DataSource zum Füllen einer Combobox mit dem Inhalt eines IList-Objekts angeboten (siehe dazu auch Abschnitt 16.11.6).
Zwei Eigenschaften der Combobox geben den Index bzw. die Referenz des ausgewählten Elements aus der Auflistung ComboBox.ObjectCollection zurück: SelectedIndex und SelectedItem. Die erste liefert den Index des ausgewählten Elements, die zweite die Referenz auf das Listenelement.
Füllen Sie eine Combobox während des Ladens der Form mit Daten, wird das Textfenster der Combobox bei der ersten Anzeige der Form kein Listenelement anzeigen. Sie sollten deshalb mit SelectedIndex oder SelectedItem sofort ein Listenelement anzeigen lassen, z.B.:
| private void Form1_Load(object sender, EventArgs e) {
|
| comboBox1.Items.AddRange(new string[]{"Frankreich", "Schweiz", "Spanien", "Deutschland", "Italien"});
|
| // Starteintrag der Combobox
|
| comboBox1.SelectedItem = "Spanien";
|
| }
|
Die Zeichenfolge des angezeigten Elements können Sie mit der Eigenschaft Text oder SelectedText abfragen. Beiden Eigenschaften kann auch eine Zeichenfolge übergeben werden, was dazu führt, dass der Text im Eingabefeld angezeigt wird – zumindest solange nicht ComboBoxStyle.DropDownList eingestellt ist. Beachten Sie aber, dass die so übergebene Zeichenfolge nicht automatisch zu den Listenelementen hinzugefügt wird. Dazu bedarf es der Add-Methode des ComboBox.ObjectCollection-Objekts.
16.13.1 Ereignisse eines Kombinationslistenfeldes
 
Im Gegensatz zu einer Listbox verfügt die Combobox über das Click-Ereignis. So wichtig dieses Ereignis für andere Steuerelemente wie eine Schaltfläche auch ist, bei einer Combobox gibt es wohl kaum eine Situation, bei der man dieses Ereignis sinnvoll einsetzen könnte, denn es wird sowohl beim Klicken der Pfeilschaltfläche ausgelöst als auch dann, wenn mit dem Mauszeiger in das Textfeld geklickt wird. Damit ist aber noch keine Auswahländerung oder auch nur die Änderung des angezeigten Textes verbunden.
Wichtig ist vielmehr das Ereignis, das eine Änderung des Inhalts des Textfeldes signalisiert: TextChanged. Die Ereignisauslösung kann zwei Ursachen haben:
|
Der Benutzer hat eine Auswahl aus der Drop-down-Liste getroffen. |
|
Der Benutzer versucht, den im Eingabefeld angezeigten Text zu editieren. Das trifft jedoch nur auf die Comboboxen zu, die nicht vom Typ DropDownList sind. |
Einschränkender und damit auch präziser verhält sich das Ereignis SelectedIndexChanged, das nur nach einer Änderung der Auswahl ausgelöst wird. Daher ist dieses Ereignis besonders dazu geeignet, anderen Komponenten die Neuauswahl mitzuteilen.
Aktionen, die beim Öffnen oder Schließen der Liste ausgeführt werden sollen, sind in den beiden Ereignissen DropDown bzw. DropDownClosed zu implementieren. Allerdings werden diese beiden Events nur ausgelöst, wenn das Kombinationslistenfeld nicht auf DropDownStyle=Simple eingestellt ist.
16.13.2 Autovervollständigung in einer »ComboBox«
 
Textboxen und Kombinationslistenfelder haben mit Einführung von .NET 2.0 die Fähigkeit der Autovervollständigung. Bei diesem Feature spielen die Eigenschaften AutoCompleteCustomSource, AutoCompleteMode und AutoCompleteSource die entscheidende Rolle. Wir hatten uns mit der Autovervollständigung bereits im Zusammenhang mit Textboxen genauer beschäftigt, wollen das Gesagte daher an dieser Stelle nicht wiederholen. Im Bedarfsfall lesen Sie einfach im Abschnitt 16.6.1 nach. |